package com.zhang.bingmei_incomeexpenditure.entity.Utils;

import com.zhang.bingmei_incomeexpenditure.entity.ie.IncomeExpenditurePageDTO;
import lombok.extern.slf4j.Slf4j;

import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.List;

import static com.zhang.comm.constant.Constant.PRECISION_MULTIPLIER;


/**
 * @author zsj
 * @description
 * @createDate 2025/10/28 10:23
 * @Entity com.dx.vector.modules.incomeExpenditure.utils.entity.
 */
@Slf4j
public class IECommUtil {

    public static IncomeExpenditurePageDTO getDTO(IncomeExpenditurePageDTO dto) {
        // 定义目标格式（如 "yyyy年MM月dd日"，用于Excel模板填充）
        SimpleDateFormat targetSdf = new SimpleDateFormat("yyyy年MM月dd日");

        // 处理开始日期：直接格式化Date对象，无需解析
        if (dto.getStartDate() != null) {
            try {
                // 直接用targetSdf格式化Date对象，得到目标格式字符串
                String formattedStartDate = targetSdf.format(dto.getStartDate());
                // 假设DTO中新增了startDateStr字段，用于存储格式化后的字符串（供Excel填充）
                dto.setStartDateStr(formattedStartDate);
            } catch (Exception e) {
                log.error("开始日期格式化失败：{}", e.getMessage());
                dto.setStartDateStr("日期格式错误");
            }
        }

        // 处理结束日期：同理
        if (dto.getEndDate() != null) {
            try {
                String formattedEndDate = targetSdf.format(dto.getEndDate());
                dto.setEndDateStr(formattedEndDate);
            } catch (Exception e) {
                log.error("结束日期格式化失败：{}", e.getMessage());
                dto.setEndDateStr("日期格式错误");
            }
        }

        return dto;
    }

    /**
     * 判断当前用户是否有权限显示修改按钮
     *  userArea 用户所属地区编码
     * @return true：显示修改按钮；false：不显示
     */
    public static Boolean isUpdateButton(){
        List<Integer> levelList = SecurityPlusUtils.getLevelList();
        if (levelList == null && levelList.isEmpty()) {
            return false;
        }
        //获取用户区域
        String userArea = SecurityPlusUtils.getArea();
        if (levelList.contains(4)){
            return Boolean.TRUE;
        }
        //如果包含市县级 3,，且是海口、三沙、三亚的市县级管理员，则不显示修改按钮
        if (levelList.contains(3)){
            if (userArea.contains("460100") || userArea.contains("460200") || userArea.contains("460300")){
                return false;
            }else{
                return Boolean.TRUE;
            }
        }

        //其他权限
        return Boolean.FALSE;
    }

    /**
     * 前端传递的万元小数 → 后端Long存储（舍去法保留3位小数）
     * @param decimal 前端传入的万元数值（如123.4567）
     * @return 放大后的Long（如123456，即123.456万元）
     */
    public static Long transferToLong(Double decimal) {
        if (decimal == null) {
            return null;
        }
        // 1. 放大10000000倍
        BigDecimal money = BigDecimal.valueOf(decimal)
                .multiply(BigDecimal.valueOf(PRECISION_MULTIPLIER));
        // 2. 舍去法（截断小数部分，不四舍五入） 自己约定吧，不可能金额还保留无限小数的
        return money.longValue();  // 1.23456789万元 = 12345.6789元 => 数据库存12345678 => 乘10000000：PRECISION_MULTIPLIER
    }

    /**
     * 后端存储的Long → 前端展示的万元小数
     * @param longValue 放大后的Long
     * @return 保留7位小数的万元数值
     */
    public static Double longToDouble(Long longValue) {
        if (longValue == null) {
            return null;
        }
        // 除以1000，自动保留3位小数
        return (double) longValue / PRECISION_MULTIPLIER; // 123456789元 ÷ 10000000 = 123.456789万元
    }
}
